Prolog Syntax & Structures (Lecture 4)

مقدمة

  • في المحاضرة دي هنفهم أكتر عن الـ Syntax (طريقة كتابة الكود) في الـ Prolog.
  • هنتعمق في أنواع البيانات (Data Objects) والـ Structures (البيانات المركبة) وإزاي بنمثلها.
  • هنعرف إزاي الـ Prolog بيعمل Matching (مطابقة أو Unification) بين البيانات المختلفة.
  • وهنراجع على أدوات الربط المنطقية (Conjunction & Disjunction) وأولوياتها.


1. أنواع البيانات (Data Objects / Terms)

كل البيانات في Prolog بنسميها Terms. بتنقسم لنوعين أساسيين زي ما بدأنا نفهم قبل كده:

أولاً: Simple Objects

بتشمل الـ Constants (الثوابت) والـ Variables (المتغيرات).

1. الـ Atoms

أمثلة على Atoms غلط (Non-Valid):

  • ا 2340ieh (بتبدأ برقم).
  • ا george-smith (فيها Dash -).
  • ا Void (بتبدأ بحرف Capital -> دي كده Variable).
  • ا _alpha (بتبدأ بـ Underscore -> دي كده Variable).

2. الـ Numbers

3. الـ Variables


ثانياً: Structured Objects

الـ Structure هو كائن واحد بيتكون من مجموعة كائنات تانية جواه (Components).

ملحوظة

نقدر نستخدم متغيرات جوة الـ Structure عادي، زي: date(Day, may, 2001).

تمثيل الـ Structures كشجرة (Tree Representation)

أي Structure نقدر نتخيله على شكل شجرة. الـ Functor هو الـ Root (الجذر)، والـ Components هم الفروع.

graph TD
    Date(("date
(Functor)")) C1["1"] C2["may"] C3["2001"] Date --- C1 Date --- C2 Date --- C3

تمثيل المعادلات الحسابية

المعادلات الحسابية في الـ Prolog بتتعامل كـ Structures، حيث العمليات (زي + و *) هي الـ Functors.
مثال للمعادلة: (a + b) * (c - 5)
تتكتب كـ Structure كده: *( +(a, b), -(c, 5) ) حاجة شبه الـ prefix , postfix الي اخدناها في الداتا ستراكتشر قبل كده

graph TD
    Mult((" Multiply (*) "))
    Add((" Add (+) "))
    Sub((" Subtract (-) "))
    A["a"]
    B["b"]
    C["c"]
    Five["5"]
    
    Mult --- Add
    Mult --- Sub
    
    Add --- A
    Add --- B
    
    Sub --- C
    Sub --- Five

2. الـ Matching (المطابقة / Unification)

من أهم العمليات في الـ Prolog هي الـ Matching. بنقول إن قيمتين (Terms) بيطابقوا بعض لو كانوا:

  1. متطابقين تماماً (Identical).
  2. أو نقدر نعوض في المتغيرات اللي فيهم عشان يبقوا متطابقين.

قواعد المطابقة الأساسية:

  1. لو Constants : بيطابقوا بعض لو هما نفس الحاجة بالظبط (مثلاً may = may).
  2. لو Variable مع أي حاجة: بيطابقها فوراً والمتغير بياخد القيمة دي .
  3. لو Structures (أشياء مركبة): بيطابقوا بعض فقط لو:
    • ليهم نفس الـ Functor (نفس الاسم).
    • ليهم نفس الـ Arity (نفس عدد الـ Components/Arguments).
    • وكل Component بيطابق الـ Component اللي في نفس مكانه الناحية التانية.

أمثلة على الـ Matching:

?- date(4, M, 2001) = date(D1, may, Y1).
?- addr(flat(4), street('Home Str.'), postcode(eh8_9lw)) = addr(flat(Z), Yy, postcode(Xxx)).

3. أدوات الربط والأولويات (Conjunction & Disjunction)

الأداة الرمز المعنى الأولوية (Binding Strength)
Conjunction , AND (و) - لازم كل الشروط تكون صح. أقوى (Stronger)
Disjunction ; OR (أو) - كفاية شرط واحد يكون صح. أضعف (Weaker)

مثال على الأولويات:

P :- Q, R; S, T, U.
P :- (Q, R) ; (S, T, U).
P :- Q, R.
P :- S, T, U.

قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : Lecture 4 - Practice

Nour Eldeen Mahmoud


Powered by Forestry.md